package com.asimasoft.cncRouter;

import java.util.Vector;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.ViewPart;

import controles.interfaz.EditorVistaPre;
import controles.interfaz.EditorVistaPreInput;

import taladro.instrucciones.InstMover;
import taladro.instrucciones.Instruccion;
import taladro.maquina.Herramienta;

public class VistaHerramientas extends ViewPart implements ISelectionListener {
	 public static final String ID = "com.asimasoft.cncRouter.vistaHerramientas";
	 private Vector<Herramienta> herramientas;
	 private String proyecto;
	 private IEditorPart ed;
	 private Tree tree;
	 private IPartListener partListener = new IPartListener() {
		@Override
		public void partActivated(IWorkbenchPart part) {
			if(part.getClass().getName()=="controles.interfaz.EditorVistaPre"){
			EditorVistaPre ed=(EditorVistaPre)part;
			if(ed.getProyecto().getNombArchivo()!=proyecto){
				setProyecto(ed.getProyecto().getNombArchivo());
				setHerramientas(ed.getProyecto().getHerramientas());
				setEd(ed);					
				}
			}
		}

		@Override
		public void partBroughtToTop(IWorkbenchPart part) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void partClosed(IWorkbenchPart part) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void partDeactivated(IWorkbenchPart part) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void partOpened(IWorkbenchPart part) {
			// TODO Auto-generated method stub
			
		}
	 };
	 
	public VistaHerramientas() {
		
	}


	public void createPartControl(Composite parent) {		
		 tree = new Tree(parent,SWT.CHECK | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
		 getSite().getWorkbenchWindow().getPartService().addPartListener(partListener);
		 tree.addListener(SWT.Selection, new Listener() {
			 public void handleEvent(Event event) {
				 String string = event.detail == SWT.CHECK ? "Checked" : "Selected";
				 if(string.equals("Checked")){
					 TreeItem tri=(TreeItem)event.item;
					 if (tri.getItemCount()>0){
						 if(tri.getChecked()){
							 	 for(int i=0;i<tri.getItemCount();i++){
							 		 tri.getItem(i).setChecked(true);
							 		 if(tri.getItem(i).getItemCount()>0){
							 			 for(int j=0;j<tri.getItem(i).getItemCount();j++){
							 				 tri.getItem(i).getItem(j).setChecked(true);										  
							 			 }
									 }								 
							 	 }
						 }else{
							 for(int i=0;i<tri.getItemCount();i++){
								 tri.getItem(i).setChecked(false);
						 		 if(tri.getItem(i).getItemCount()>0){
						 			 for(int j=0;j<tri.getItem(i).getItemCount();j++){
						 				 tri.getItem(i).getItem(j).setChecked(false);										  
						 			 }
								 }
							 }
						 }						  
					 }else{
						 Instruccion insts[]=(Instruccion[])event.item.getData();
						 if(tri.getChecked()){
							 ((EditorVistaPre)ed).getPintor().marcar(insts);		
							 insts[1].setSeleccionada(true);
						 }else{
			        		((EditorVistaPre)ed).getPintor().repintar(insts);
			        		insts[1].setSeleccionada(false);
						 }
					 }
			 	}
			}
		 });			 
	}
	
	public void selectionChanged(IWorkbenchPart part, ISelection sel) {
	      //if the selection is a readme file, get its sections.	   
	}

	private void refresh() {
		tree.removeAll();
		TreeItem ti = new TreeItem(tree, SWT.NONE);
		ti.setText(proyecto);
		for(int i=0;i<herramientas.size();i++){
			TreeItem tsi=new TreeItem(ti,SWT.NONE);
			tsi.setText(((Herramienta)herramientas.get(i)).getNombre());
			TreeItem tsg=null;
			int numGrupo=0;
			boolean grupos=false;
			if(proyecto.contains("GTL")){			
				grupos=true;	
				tsg=new TreeItem(tsi,SWT.NONE);
				tsg.setText("Grupo"+(++numGrupo));
			}	
			for(int j=0;j<herramientas.get(i).getInstrucciones().size();j++){
				Instruccion inst []=new Instruccion[2];
				if(j>0){
					inst[0]=herramientas.get(i).getInstrucciones().get(j-1);
				}else{
					inst[0]=herramientas.get(i).getInstrucciones().get(herramientas.get(i).getInstrucciones().size()-1);
				}
				inst[1]=herramientas.get(i).getInstrucciones().get(j);
				if(grupos && inst[1] instanceof InstMover && ((InstMover)inst[1]).getDown()==0){
					tsg=new TreeItem(tsi,SWT.NONE);
					tsg.setText("Grupo"+(++numGrupo));
					if(inst[1].isSeleccionada()){
						tsg.setChecked(true);
					}else{
						tsg.setChecked(false);
					}					
				}else if(!grupos){
					TreeItem tsis=new TreeItem(tsi,SWT.NONE);
					tsis.setText((String)herramientas.get(i).getInstrucciones().get(j).toString());
					tsis.setData(inst);
					if(inst[1].isSeleccionada()){
						tsis.setChecked(true);
					}else{
						tsis.setChecked(false);
					}
				}else{
					TreeItem tsis=new TreeItem(tsg,SWT.NONE);
					tsis.setText((String)herramientas.get(i).getInstrucciones().get(j).toString());
					tsis.setData(inst);
					if(inst[1].isSeleccionada()){
						tsis.setChecked(true);
					}else{
						tsis.setChecked(false);
					}
				}
			}		
		}
	}

	public void setFocus() {
		
	}


	public Vector<Herramienta> getHerramientas() {
		return herramientas;
	}


	public void setHerramientas(Vector<Herramienta> herramientas) {
		this.herramientas = herramientas;		
	}


	public String getProyecto() {
		return proyecto;
	}


	public void setProyecto(String proyecto) {
		this.proyecto = proyecto;		
	}


	public IEditorPart getEd() {
		return ed;
	}


	public void setEd(IEditorPart ed) {
		this.ed = ed;
		refresh();
	}
	
	

}
